package ae.pcfc.cldos.online.common.clddb.domain.manager;

import java.util.List;

import ae.pcfc.cldos.online.common.ConstantsCommon.Steps;
import ae.pcfc.cldos.online.common.clddb.domain.AppMetaData;
import ae.pcfc.cldos.online.common.exception.BadAppException;
import ae.pcfc.cldos.online.common.vo.UserInformationVO;
import ae.pcfc.cldos.online.common.vo.tasks.TaskRequestDbRestrictions;

public interface AppMetaDataDOM {

	public void add(AppMetaData appMetaData);
	
	public void update(AppMetaData appMetaData);
	
	public void updateAndAddEtks(AppMetaData appMetaData);
	
	public AppMetaData getAppMetaDataById(String applicationId);
	
	public void addEtksAppMetaData(AppMetaData appMetaData);
	
	public AppMetaData getPlainAppMetaDataById(String appId) throws Exception;
	
	public List<AppMetaData> getAllAppRequests(UserInformationVO userInformationVO, TaskRequestDbRestrictions taskRequestDbRestrictions);
	
	public Integer getApplicationCount(UserInformationVO userInformationVO, TaskRequestDbRestrictions taskRequestDbRestrictions);
	
	public AppMetaData getAppMetaDataById(String appId, String processCode,  Steps step, Long clientId) throws BadAppException;
	
	public AppMetaData getAppMetaDataByIdForGeneralAdmin(String appId, String processCode, Steps step) throws BadAppException;
	
	public  List<AppMetaData> getAllApplications(UserInformationVO userInformationVO, TaskRequestDbRestrictions taskRequestDbRestrictions);
	
	public boolean isEmployeeHasRequest(String passportName, String passportNo);
	
	public Integer getEmploymentVisaPendingRequests(Long clientId);
	
	public AppMetaData getApplicationByReferenceNumber(String clientRefNo);
	
	public boolean isEmployeeHasRequest(String empId);
	/**
	 * @param clientId
	 * @return
	 */
	public Integer getVisitVisaPendingRequests(Long clientId);
	
	/**
	 * @param clientId
	 * @return
	 */
	public Integer getPendingRequests(Long clientId);
	
	public AppMetaData findAppMetaDataById(Long appId);
}
